<?php
/**
 * 予定管理画面データモデルモジュール
 */
require_once APPLICATION_PATH . '/models/Names/Names.php';
require_once APPLICATION_PATH . '/models/Calendar/xml/CalendarXmlController.php';
require_once 'Request/DateTime.php';
require_once 'DateMath.php';

/**
 * 予定管理画面データモデルクラス
*/
class Models_Schedule_Controller
{
	const WINDOW_TITLE1 = '予定追加';
	const WINDOW_TITLE2 = '予定編集';

	const REGIST_HTTPREQ = 'HTTPREQ';

	/** HTTPリクエスト */
	protected $_objHttpRequest;
	/** @var  Models_Calendar_Xml_Controller スケジュールデータセット*/
	protected $_objScheduleDataset = FALSE;

	/**
	 * コンストラクタ
	 */
	public function __construct()
	{
		/*** ＨＴＴＰリクエスト実装 */
		$this->_objHttpRequest = new Lib_Request_DateTime();
		$yyyymm = '';
		if (( $this->_objHttpRequest->getYear() != '') && ($this->_objHttpRequest->getMonth() != '')){
			$yyyymm = $this->_objHttpRequest->getYear().sprintf('%02d', $this->_objHttpRequest->getMonth());
		}
		$YoteiId = $this->_objHttpRequest->get(Names::YOTEIID);
		/***
		 * ＨＴＴＰリクエストに予定ＩＤが設定されている場合は、
		 * スケジュールデータセットから該当スケジュールを読み込む
		 */
		if ($YoteiId != '') {
			if ($yyyymm != '') {
				$this->_objScheduleDataset = new Models_Calendar_Xml_Controller($yyyymm);
				$this->_ScheduleData = $this->_objScheduleDataset->searchId($YoteiId);
			}
		}
	}

	/**
	 * ウィンドータイトル取得
	 * ＨＴＴＰリクエストに予定ＩＤが指定されている場合は「予定編集」
	 * そうでない場合は「予定追加」
	 */
	public function getWindowTitle()
	{
		if ($this->_objHttpRequest->get(Names::YOTEIID) == '') {
			return self::WINDOW_TITLE1;
		}else{
			return self::WINDOW_TITLE2;
		}
	}

	/**
	 * 予定日取得
	 * ＨＴＴＰリクエストに予定ＩＤが指定されている場合は
	 * 該当予定の予定日を返す
	 * そうでない場合は、ＨＴＴＰリクエストに設定されている年月日を返す
	 * それもない場合は、現在年月日を返す。
	 * 書式：9999年z9月z9日（曜日）
	 */
	public function getYoteibi()
	{
		$Request = self::REGIST_HTTPREQ;
		$objDateMath = new DateMath();
		if ($this->_objHttpRequest->get(Names::YOTEIID) != ''){
			if ($this->_objScheduleDataset !== FALSE) {
				$aryYoteibi
				= $this->_objScheduleDataset->getDateOfYotei($this->_objHttpRequest->get(Names::YOTEIID));
				if ( $aryYoteibi !== FALSE) {
					$iYoubi = $objDateMath->getDayOfWeek(
							$aryYoteibi[Lib_Request_DateTime::KEY_YEAR]
							. sprintf('%02d', $aryYoteibi[Lib_Request_DateTime::KEY_MONTH])
							. sprintf('%02d', $aryYoteibi[Lib_Request_DateTime::KEY_DAY])
							. '0000'
							);
					$sYoubi = $objDateMath->aryDayOfWeekJp[$iYoubi];
					$sResult
					= $aryYoteibi[Lib_Request_DateTime::KEY_YEAR] . '年'
					. sprintf('%d', $aryYoteibi[Lib_Request_DateTime::KEY_MONTH]) . '月'
					. sprintf('%d', $aryYoteibi[Lib_Request_DateTime::KEY_DAY]) . '日'
					. sprintf('（%s曜日）', $sYoubi);
					return $sResult;
				}
			}
		}

		/***
		 * HTTPリクエストから年月日取得をチャレンジ
		 */
		$sResult = $this->_getDateFromHttpRequest();
		if ($sResult != '') {
			return $sResult;
		}

		/***
		 * 現在年月日を返す
		 */
		$sResult = $this->_getNow();
		return $sResult;
	}

	/**
	 * 予定データセットオブジェクトを返却する
	 */
	public function getScheduleDatasetObject()
	{
			return $this->_objScheduleDataset;
	}



	/**
	 * 現在の年月日を変えいす
	 * 書式：9999年z9月z9日（曜日）
	 */
	protected function _getNow()
	{
		$sResult = date('Y年n月j日');
		$objDateMath = new DateMath();
		$iYoubi = $objDateMath->getDayOfWeek();
		$sYoubi = $objDateMath->aryDayOfWeekJp[$iYoubi];
		$sResult .= '(' . $sYoubi . '曜日)';
		return $sResult;
	}

	/**
	 * HTTPリクエストから年月日を返す
	 * 書式：9999年z9月z9日（曜日）
	 */
	protected function _getDateFromHttpRequest()
	{
		if ($this->_isYYYYMMDD_Complete() === FALSE) {
			return '';
		}
		$sResult
		= 	$this->_objHttpRequest->getYear() . '年'
		. sprintf('%d', $this->_objHttpRequest->getMonth()) . '月'
		. sprintf('%d', $this->_objHttpRequest->getDay()) . '日';

		$objDateMath = new DateMath();
		$iYoubi
		= $objDateMath->getDayOfWeek(
				$this->_objHttpRequest->getYear().
				sprintf('%02d', $this->_objHttpRequest->getMonth()).
				sprintf('%02d', $this->_objHttpRequest->getDay()).
				'0000'
				);
		$sYoubi = $objDateMath->aryDayOfWeekJp[$iYoubi];

		$sResult .= '（' . $sYoubi . '曜日）';
		return $sResult;
	}

	/**
	 * HTTPリクエストに年月日がそろっていればＴＲＵＥを返す
	 */
	protected function _isYYYYMMDD_Complete()
	{
		if ($this->_objHttpRequest->getYear() == '') {
			return FALSE;
		}
		if ($this->_objHttpRequest->getMonth() == ''){
			return FALSE;
		}
		if ($this->_objHttpRequest->getDay()==''){
			return FALSE;
		}
		return TRUE;
	}
}